package com.example.project.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.project.core.text.Convert;
import com.example.project.entity.ProjectRole;
import com.example.project.mapper.ProjectRoleMapper;
import com.example.project.service.ProjectRoleService;
import com.example.project.utils.DateUtils;

/**
 * 项目角色Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-11-27
 */
@Service
public class ProjectRoleServiceImpl extends BaseServiceImpl implements ProjectRoleService {

	@Autowired
	private ProjectRoleMapper projectRoleMapper;

	/**
	 * 查询项目角色
	 * 
	 * @param id 项目角色主键
	 * @return 项目角色
	 */
	@Override
	public ProjectRole selectProjectRoleById(Long id) {
		return projectRoleMapper.selectProjectRoleById(id);
	}

	/**
	 * 查询项目角色列表
	 * 
	 * @param projectRole 项目角色
	 * @return 项目角色
	 */
	@Override
	public List<ProjectRole> selectProjectRoleList(ProjectRole projectRole) {
		return projectRoleMapper.selectProjectRoleList(projectRole);
	}

	/**
	 * 查询系统角色列表
	 * 
	 * @return 项目角色集合
	 */
	@Override
	public List<ProjectRole> selectAllList() {
		return projectRoleMapper.selectAllList();
	}

	/**
	 * 查询有效项目角色列表
	 * 
	 * @return 项目角色集合
	 */
	@Override
	public List<ProjectRole> selectValidProjectRoleList() {
		return projectRoleMapper.selectValidProjectRoleList();
	}

	/**
	 * 新增项目角色
	 * 
	 * @param projectRole 项目角色
	 * @return 结果
	 */
	@Override
	public int insertProjectRole(ProjectRole projectRole) {
		projectRole.setCreateTime(DateUtils.curLocalDateTime());
		
		// 检查角色名称是否已存在
		int checkRoleName = projectRoleMapper.checkRoleName(projectRole.getName(), 0L);
		if (checkRoleName >= 1) {
			return -1; // 角色名称已存在
		}
		
		return projectRoleMapper.insertProjectRole(projectRole);
	}

	/**
	 * 修改项目角色
	 * 
	 * @param projectRole 项目角色
	 * @return 结果
	 */
	@Override
	public int updateProjectRole(ProjectRole projectRole) {
		projectRole.setUpdateTime(DateUtils.curLocalDateTime());
		
		// 检查角色名称是否已存在（排除自身）
		int checkRoleName = projectRoleMapper.checkRoleName(projectRole.getName(), projectRole.getId());
		if (checkRoleName >= 1) {
			return -1; // 角色名称已存在
		}
		
		return projectRoleMapper.updateProjectRole(projectRole);
	}

	/**
	 * 批量删除项目角色
	 * 
	 * @param ids 需要删除的项目角色主键
	 * @return 结果
	 */
	@Override
	public int deleteProjectRoleByIds(String ids) {
		return projectRoleMapper.deleteProjectRoleByIds(Convert.toStrArray(ids));
	}

	/**
	 * 删除项目角色信息
	 * 
	 * @param id 项目角色主键
	 * @return 结果
	 */
	@Override
	public int deleteProjectRoleById(Long id) {
		return projectRoleMapper.deleteProjectRoleById(id);
	}

	/**
	 * 检查角色名称是否已存在
	 * 
	 * @param name 角色名称
	 * @param id 角色ID（排除自身）
	 * @return 存在数量
	 */
	@Override
	public int checkRoleName(String name, Long id) {
		return projectRoleMapper.checkRoleName(name, id);
	}

}